package com.jxpanda.infrastructure.crypto.algorithm.signer.contract;

import com.jxpanda.infrastructure.crypto.algorithm.Crypto;
import com.jxpanda.infrastructure.crypto.model.BinaryData;

public interface Signer extends Crypto {

    /**
     * 用 signingKey 对 data 签名
     */
    default BinaryData sign(byte[] contentBytes) {
        return sign(new BinaryData(contentBytes));
    }

    /**
     * 用 signingKey 对 data 签名
     */
    default BinaryData sign(String contentString) {
        return sign(BinaryData.fromString(contentString));
    }

    /**
     * 用 signingKey 对 data 签名
     */
    default BinaryData signBase64(String base64String) {
        return sign(BinaryData.fromBase64(base64String));
    }

    /**
     * 用 signingKey 对 data 签名
     */
    BinaryData sign(BinaryData contentData);

    /**
     * 用 verificationKey 验签 data 和 signatureBytes 是否一致
     */
    default boolean verify(byte[] contentBytes, byte[] signatureBytes) {
        return verify(new BinaryData(contentBytes), new BinaryData(signatureBytes));
    }

    /**
     * 用 verificationKey 验签 data 和 signatureBytes 是否一致
     */
    default boolean verify(String contentString, String signatureString) {
        return verify(BinaryData.fromString(contentString), BinaryData.fromString(signatureString));
    }

    /**
     * 用 verificationKey 验签 data 和 signatureBytes 是否一致
     */
    default boolean verifyBase64(String contentString, String signatureString) {
        return verify(BinaryData.fromBase64(contentString), BinaryData.fromBase64(signatureString));
    }

    /**
     * 用 verificationKey 验签 data 和 signatureBytes 是否一致
     */
    boolean verify(BinaryData contentData, BinaryData signatureData);

}
